# 【一】启动浏览器驱动
# 方式一：全局配置
# 方式二：局部配置
# 【1】创建一个浏览器对象
# 局部配置当前驱动的位置
import os
import random
import time

from selenium.webdriver import Chrome

from selenium.webdriver.chrome.service import Service

# 【2】定义驱动位置 ( 建议是绝对路径 并且是 模块帮你创建的绝对路径 )
executable_path = os.path.join(os.path.dirname(__file__), "chromedriver")

# 【3】用内置的服务类创建一个服务对象
service = Service(
    executable_path=executable_path
)

# 【4】把创建好的服务对象给你的浏览器对象
browser = Chrome(
    service=service
)

# 【二】节点交互和操作节点
# 【1】节点获取方式
from selenium.webdriver.common.by import By

browser.get("https://www.baidu.com")
'''
class By:
    """Set of supported locator strategies."""
    
    # 通过标签的ID定位标签
    ID = "id"
    # 通过xpath表达式定位标签
    XPATH = "xpath"
    # 通过标签中间的文本内容进行模糊查询
    LINK_TEXT = "link text"
    # 通过标签中间的文本内容进行模糊查询
    PARTIAL_LINK_TEXT = "partial link text"
    # 标签的name属性定位标签
    NAME = "name"
    # 通过标签的名字定位标签
    TAG_NAME = "tag name"
    # 通过标签的class值定位标签
    CLASS_NAME = "class name"
    # 通过 css 选择器定位标签
    CSS_SELECTOR = "css selector"
'''

# 【2】8中定位器
# （1）By.ID
# 获取标签
# search_input = browser.find_element(By.ID, "kw")
# （2）By.TAG_NAME
# search_input = browser.find_elements(By.TAG_NAME, "input")
# 向标签中输入内容
# （3）By.CLASS_NAME
# search_input = browser.find_element(By.CLASS_NAME, "s_ipt")
# （4）By.LINK_TEXT
# search_input = browser.find_element(By.LINK_TEXT, "习近平要求强化这一机制")
# （5）By.XPATH
# search_input = browser.find_element(By.XPATH, '//*[@id="kw"]')
# （6）By.CSS_SELECTOR
# search_input = browser.find_element(By.CSS_SELECTOR, '#kw')
#
# print(search_input)
# search_input.send_keys("迪迦")

time.sleep(3)

# 【3】节点交互方式
'''
kw1.clear()        # 清除元素的值
kw1.click()        # 点击元素
kw1.id             # Selenium所使用的内部ID
kw1.get_property('background') # 获取元素的属性的值
kw1.get_attribute('id') # 获取元素的属性的值
kw1.location       # 不滚动获取元素的坐标
kw1.location_once_scrolled_into_view  #不滚动且底部对齐并获取元素的坐标
kw1.parent         #父元素
kw1.send_keys('')  # 向元素内输入值
kw1.size           #大小
kw1.submit         #提交
kw1.screenshot('2.png') #截取元素形状并保存为图片
kw1.tag_name       #标签名
kw1.text           #内容，如果是表单元素则无法获取
kw1.is_selected()  #判断元素是否被选中
kw1.is_enabled()   #判断元素是否可编辑
kw1.is_displayed   #判断元素是否显示
kw1.value_of_css_property('color') #获取元素属性的值
kw1._upload('2.png') #上传文件
'''

'''
kw1.clear()        # 清除元素的值
kw1.click()        # 点击元素
kw1.send_keys('')  # 向元素内输入值
kw1.submit         #提交
kw1.screenshot('2.png') #截取元素形状并保存为图片
kw1.text           #内容，如果是表单元素则无法获取
'''

# 打开百度页面 输入 Python
search_input = browser.find_element(By.XPATH, '//*[@id="kw"]')
search_input.send_keys("Python")
time.sleep(3)
# 清除输入框
search_input.clear()
time.sleep(3)
# 输入 Go
search_input.send_keys("Go")
time.sleep(3)
# 点击搜索
browser.find_element(By.XPATH, '//*[@id="su"]').click()
# 截图
search_input.screenshot('2.png')
time.sleep(3)
